package helpers;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

import com.thoughtworks.xstream.converters.SingleValueConverter;

/*
 * Wird für XStream-Serialisierung benötigt!
 * 
 * Konvertiert den Preis so, dass Trennzeichen ein . ist und
 * zwei Nachkommastellen angezeigt werden
 * z.B. 3,5 zu 3.50
 */
public class PriceConverter implements SingleValueConverter {

	/*
	 * Überprüft, ob eine Konvertierung möglich ist
	 * (hier nur dann, wenn Object vom Typ Double ist)
	 */
	@SuppressWarnings("rawtypes")
	@Override
	public boolean canConvert(Class type) {
		return type.equals(Double.class);
	}

	/*
	 * Methode zur eigentlichen Konvertierung
	 * Übergabeparameter ist z.B. 3,5 und Rückgabe dann 3.50
	 * 
	 * Wird beim Schreiben des XML-Formats verwendet
	 */
	@Override
	public String toString(Object obj) {

		// Zu kompliziert.
		// DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance();
		// dfs.setDecimalSeparator('.'); // Trennzeichen Punkt
		//
		// // Legt fest, dass genau zwei Nachkommastellen angezeigt werden
		// DecimalFormat df = new DecimalFormat("#0.00", dfs);
		// return df.format(obj);

		// Locale.ENGLISH -> Punkt als Trennzeichen
		// 2 -> 2 Nachkommastellen
		// f -> Fließkommazahl
		// Was genau %3 macht, konnte ich noch nicht herausfinden
		return String.format(Locale.ENGLISH, "%3.2f", obj);
	}

	/*
	 * Preis aus der XML wird als String übergeben und in Double umgewandelt
	 * 
	 * Wird beim Lesen des XML-Formats verwendet
	 */
	@Override
	public Object fromString(String str) {
		return Double.parseDouble(str);
	}

}
